package com.atguigu.lease.common.converter;

import com.atguigu.lease.model.enums.ItemType;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

//转换器在 handler方法被调用前，springmvc为handler方法获取参数转换时，如果handler需要ItemType类型的参数
// springmvc 会使用当前的Converter
//将字符串参数 转为 枚举对象的转换器
// Converter： 转换器父接口， 泛型1：参数类型，泛型2：表示参数要转换传给handler方法的类型
//@Component //将转换器注入到IOC容器中
public class StringToItemTypeConverter implements Converter<String, ItemType> {
    //转换参数的业务方法：
    @Override
    public ItemType convert(String source) {//参数：source表示 接受到的参数  type=1/2
        if(StringUtils.isEmpty(source)){
            return null;//没有接受到 参数，返回空(handler方法会接收到空)
        }
        //使用参数和 ItemType的枚举对象的code值比较，如果一致 就返回匹配的枚举对象，不一致再判断下一个
//        ItemType.values() 获取枚举类所有的实例
        for (ItemType itemType : ItemType.values()) {
            if(source.equals(itemType.getCode().toString())){
                return itemType;
            }
        }
        throw new RuntimeException(source+" 没有匹配的类型");
//        return null;
    }
}
